gusucode.com > 各种VC自绘控件源码程序 > 各种VC自绘控件源码/code/SkinControls(自绘MFC基本控件 )/SkinControls/SkinControls/SkinUIHyperLink.cpp

    
#include "StdAfx.h"
#include "SkinUIHyperLink.h"
#include "SkinUIWnd.h"

CSkinUIHyperLink::CSkinUIHyperLink(void) : m_bHover(false), m_bNeedInvalidate(false), m_bLButtonDown(false)
{
	m_crText = RGB(0,87,233);
}

CSkinUIHyperLink::~CSkinUIHyperLink(void)
{
}

LPCTSTR CSkinUIHyperLink::GetClass() const
{
	return TEXT("SkinUIHyperLink");
}

void CSkinUIHyperLink::PaintText(CDC * pDC)
{
	if (!IsVisible()) return;

	pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(m_crText);
	CFont font;
	LOGFONT lf;
	m_pFont->GetLogFont(&lf);
	lf.lfUnderline = m_bHover ? 1:0;
	font.CreateFontIndirect(&lf);
	pDC->SelectObject(font);
	pDC->DrawText(m_strText, &m_rcItem, m_uTextFormat);
}

//操作相关
void CSkinUIHyperLink::MouseMove(const CPoint & point)
{
	if ((IsVisible() == false) || (IsEnabled() == false)) return;

	if ((m_Rgn.PtInRegion(point) == TRUE) && (!m_bNeedInvalidate) && (!m_bLButtonDown))
	{
		m_bHover = true;
		m_pParentWnd->InvalidateRect(&m_rcItem, FALSE);
	}
	else if (m_Rgn.PtInRegion(point) == FALSE)
	{
		m_bHover = false;
		m_bNeedInvalidate = false;
		m_pParentWnd->InvalidateRect(&m_rcItem, FALSE);
	}
}

void CSkinUIHyperLink::MouseLeave()
{
	if ((IsVisible() == false) || (IsEnabled() == false)) return;

	if (m_bHover)
	{
		m_bHover = false;
		m_pParentWnd->InvalidateRect(&m_rcItem, FALSE);
	}
}

void CSkinUIHyperLink::MouseLButtonDown(const CPoint & point)
{
	if ((IsVisible() == false) || (IsEnabled() == false)) return;

	if ((m_Rgn.PtInRegion(point) == TRUE) )
	{
		m_bLButtonDown = true;
		m_pParentWnd->SetCapture();
	}
}

void CSkinUIHyperLink::MouseLButtonUp(const CPoint & point)
{
	if ((IsVisible() == false) || (IsEnabled() == false)) return;

	ReleaseCapture();
	if ((m_Rgn.PtInRegion(point) == TRUE) && m_bLButtonDown)
	{
		m_pParentWnd->LButtonClickListener(GetName());
	}
	m_bLButtonDown = false;
}

BOOL CSkinUIHyperLink::MouseCursor(const CPoint & point)
{
	if ((IsVisible() == false) || (IsEnabled() == false)) return FALSE;

	if ((m_Rgn.PtInRegion(point) == TRUE) )
	{
		::SetCursor(GetSysHandCursor());
		return TRUE;
	}
	
	return FALSE;
}

void CSkinUIHyperLink::SetTextColor(COLORREF crText)
{
	m_crText = crText;
}